Bash
Select a sub category: *Shell Scripting Description: On most Linux systems a program called bash (which stands for Bourne Again SHell, an enhanced version of the original Unix shell program, sh, written by Steve Bourne) acts as the shell program. Besides bash, there are other shell programs that can be installed in a Linux system. These include: ksh, tcsh and zsh. Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. Bash also incorporates useful features from the Korn and C shells (ksh and csh). Bash is intended to be a conformant implementation of the IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2). A quick reference guide to bash can be found here (http://community.linuxmint.com/tutorial/view/100). If the last character of your shell prompt is # rather than $, you are operating as the superuser. This means that you have administrative privileges. This can be potentially dangerous, since you are able to delete or overwrite any file on the system. Unless you absolutely need administrative privileges, do not operate as the superuser. Example Commands: - Most commands operate like this: command -options arguments. Commands can be one of 4 different kinds: 1. An executable program like all those files we saw in /usr/bin. Within this category, programs can be compiled binaries such as programs written in C and C++, or programs written in scripting languages such as the shell, Perl, Python, Ruby, etc. 2. A command built into the shell itself. bash provides a number of commands internally called shell builtins. The cd command, for example, is a shell builtin. 3. A shell function. These are miniature shell scripts incorporated into the environment. We will cover configuring the environment and writing shell functions in later lessons, but for now, just be aware that they exist. 4. An alias. Commands that you can define yourselves, built from other commands. This will be covered in a later lesson. Command - What it does: pwd - print working directory ls - lists all the files in the directory. Note: you can type "." to refer to the directory you are in or ".." for the parent directory. You have to use "ls -a" to see files with a period at the beginning of their name. less - You use like "less text_file". It is a text viewer. You type "q" to exit. You type "v" to open it to where you can edit it. file - You use like "file name_of_file". It tells you information about a file, like what type it is. cd - Change directory - used to move around the file system. cp, mv, rm, mkdir - Copies / moves / deletes / creates directories. You can use wild cards, see below. "mv" can also rename files. type, which, help, man - Used to learn commands. type will tell you the type, which locates a command, help is local help, and man is the online page. echo- prints text arguments of standard outputs. ex: echo * will print current directory. chmod, chown, chgrp - modify file access rights / change file ownership / change a file's group ownership = Has to be ran in su. su, sudo - temporarily become the superuser. Type "exit" to stop commands as super user. ps, kill, jobs, bg, fg - list the processes running on the system/ kill (PID from ps)- send a signal to one or more processes (usually to "kill" a process)/ an alternate way of listing your own processes/ put a process in the background/ put a process in the forground. df -h, du -cksh - Shows disk space / show the size of the current directory. For cksh, just append for another other directory. ex: du -cksh /usr/bin uname -a, cat /etc/issue - shows the kernel version installed / shows the OS version you are running. Kill codes: Use these as arguments to the "kill" command 1. SIGHUP - Hang up signal. Programs can listen for this signal and act upon it. This signal is sent to processes running in a terminal when you close the terminal. 2. SIGINT - Interrupt signal. This signal is given to processes to interrupt them. Programs can process this signal and act upon it. You can also issue this signal directly by typing Ctrl-c in the terminal window where the program is running. 15. SIGTERM - Termination signal. This signal is given to processes to terminate them. Again, programs can process this signal and act upon it. This is the default signal sent by the kill command if no signal is specified. 9 SIGKILL Kill signal. This signal causes the immediate termination of the process by the Linux kernel. Programs cannot listen for this signal. Example: kill -9 1234 - where 1234 is the PID of the process I want to stop. Directories: Path - What it contains: / - The root directory where the file system begins. In most cases the root directory only contains subdirectories. /boot - This is where the Linux kernel and boot loader files are kept. The kernel is a file called vmlinuz. /etc - The /etc directory contains the configuration files for the system. All of the files in /etc should be text files. Points of interest: /etc/passwd - The passwd file contains the essential information for each user. It is here that users are defined. /etc/fstab - The fstab file contains a table of devices that get mounted when your system boots. This file defines your disk drives. /etc/hosts - This file lists the network host names and IP addresses that are intrinsically known to the system. /etc/init.d - This directory contains the scripts that start various system services typically at boot time. /bin, /usr/bin - These two directories contain most of the programs for the system. The /bin directory has the essential programs that the system requires to operate, while /usr/bin contains applications for the system's users. /sbin, /usr/sbin - The sbin directories contain programs for system administration, mostly for use by the superuser. /usr - The /usr directory contains a variety of things that support user applications. Some highlights: /usr/share/X11 - Support files for the X Window system /usr/share/dict - Dictionaries for the spelling checker. Bet you didn't know that Linux had a spelling checker. See look and aspell. /usr/share/doc - Various documentation files in a variety of formats. /usr/share/man - The man pages are kept here. /usr/src - Source code files. If you installed the kernel source code package, you will find the entire Linux kernel source code here. /usr/local - /usr/local and its subdirectories are used for the installation of software and other files for use on the local machine. What this really means is that software that is not part of the official distribution (which usually goes in /usr/bin) goes here. When you find interesting programs to install on your system, they should be installed in one of the /usr/local directories. Most often, the directory of choice is /usr/local/bin. /var - The /var directory contains files that change as the system is running. This includes: /var/log - Directory that contains log files. These are updated as the system runs. /var/spool - This directory is used to hold files that are queued for some process, such as mail messages and print jobs. When a user's mail first arrives on the local system (assuming you have local mail), the messages are first stored in /var/spool/mail /lib - The shared libraries (similar to DLLs in that other operating system) are kept here. /home - /home is where users keep their personal work. In general, this is the only place users are allowed to write files. This keeps things nice and clean :-) /root - This is the superuser's home directory. /tmp - /tmp is a directory in which programs can write their temporary files. /dev - The /dev directory is a special directory, since it does not really contain files in the usual sense. Rather, it contains devices that are available to the system. In Linux (like Unix), devices are treated like files. You can read and write devices as though they were files. For example /dev/fd0 is the first floppy disk drive, /dev/sda (/dev/hda on older systems) is the first hard drive. All the devices that the kernel understands are represented here. /proc - The /proc directory is also special. This directory does not contain files. In fact, this directory does not really exist at all. It is entirely virtual. The /proc directory contains little peep holes into the kernel itself. There are a group of numbered entries in this directory that correspond to all the processes running on the system. In addition, there are a number of named entries that permit access to the current configuration of the system. Many of these entries can be viewed. Try viewing /proc/cpuinfo. This entry will tell you what the kernel thinks of your CPU. /media,/mnt - Finally, we come to /media, a normal directory which is used in a special way. The /media directory is used for mount points. As we learned in the second lesson, the different physical storage devices (like hard disk drives) are attached to the file system tree in various places. This process of attaching a device to the tree is called mounting. For a device to be available, it must first be mounted. When your system boots, it reads a list of mounting instructions in the file /etc/fstab, which describes which device is mounted at which mount point in the directory tree. This takes care of the hard drives, but you may also have devices that are considered temporary, such as CD-ROMs, thumb drives, and floppy disks. Since these are removable, they do not stay mounted all the time. The /media directory is used by the automatic device mounting mechanisms found in modern desktop oriented Linux distributions. On systems that require manual mounting of removable devices, the /mnt directory provides a convenient place for mounting these temporary devices. You will often see the directories /mnt/floppy and /mnt/cdrom. To see what devices and mount points are used, type mount. Multiple Dir's - Files with a "->" at the end of their filenames are "symbolic linked files". This one file may point to one or more files. Wild Cards: Wildcard - Meaning: * - Matches any characters ? - Matches any single character characters - Matches any character that is a member of the set characters. The set of characters may also be expressed as a POSIX character class such as one of the following: (below) - POSIX Character Classes :alnum: - Alphanumeric characters :alpha: - Alphabetic characters :digit: - Numerals :upper: - Uppercase alphabetic characters :lower: - Lowercase alphabetic characters !characters - Matches any character that is not a member of the set characters Examples: Command.......................................Pattern Matches *......................................................All filenames g*....................................................All filenames that begin with the character "g" b*.txt...............................................All filenames that begin with the character "b" and end with the characters ".txt" Data???...........................................Any filename that begins with the characters "Data" followed by exactly 3 more characters. abc*.............................................Any filename that begins with "a" or "b" or "c" followed by any other characters. upper:*.....................................Any filename that begins with an uppercase letter. This is an example of a character class. BACKUP.digit:digit:.........Another example of character classes. This pattern matches any filename that begins with the characters "BACKUP." followed by exactly two numerals. *[!:lower:]....................................Any filename that does not end with a lowercase letter. Special Shell Characters: \ ' " and ' - Used for quoting and were described before. < and > - Used for input/output redirection and were described before. | - Pipes the output of the command to the left of the pipe symbol "|" to the input of the command on the right of the pipe symbol. ; - Separates multiple commands written on a single line. / - Separate the command words. - Completes a command or set of commands. ( ) - Enclose command(s) to be launched in a separate shell (subshell). E.g. ( dir ). { } - Enclose a group of commands to be launched by the current shell. E.g. { dir }. It needs the spaces. & - Causes the preceding command to execute in the background (i.e., asynchronously, as its own separate process) so that the next command does not wait for its completion. *- When a filename is expected, it matches any filename except those starting with a dot (or any part of a filename, except the initial dot). ? - When a filename is expected, it maches any single character [ ]- When a filename is expected, it maches any single character enclosed inside the pair of [ ]. && - Is an "AND" connecting two commands. command1 && command2 will execute command2 only if command1 exits with the exit status 0 (no error). For example: cat file1 && cat file2 will display file2 only if displaying file1 succeeded. || - An "OR" connecting two commands. command1 || command2 will execute command2 only if command1 exits with the exit status of non-zero (with an error). For example: cat file1 || cat file2 will display file2 only if displaying file1 didn't succeed. = - Assigns a value to a variable. Example. The command: "me=blah" assigns the value "blah" to the variable called "me". I can print the name of the variable using: echo $me $- Precedes the name of a variable to be expanded. The variables are either assigned using "=" or are one of the pre-defined variables. $0- Name of the shell or the shell script being executed. $# - Number of the positional parameters to the command. $1 - The value of the first positional parameter passed to the command. $2 is the second positional parameter passed to the command. etc. up to $9. $* - Expands to all positional parameters passed to the command $@ - Expands to all positional parameters passed to the command, but individually quoted when "$@" is used. Operations: ls > file_list.txt - Standard output. ls >>file_list.txt - Appends instead of overwrite. sort < file_list.txt - Standard input. You can do both, ex: sort < file_list.txt > sorted_file_list.txt. This will sort the document and create a text file in the current directory. ls -l | less - Pipelines take the output of one file and use them as input for another. Filters: One kind of program frequently used in pipelines is called filters. Filters take standard input and perform an operation upon it and send the results to standard output. In this way, they can be combined to process information in powerful ways. Here are some of the common programs that can act as filters: Program - What it does: sort - Sorts standard input then outputs the sorted result on standard output. uniq - Given a sorted stream of data from standard input, it removes duplicate lines of data (i.e., it makes sure that every line is unique). grep - Examines each line of data it receives from standard input and outputs every line that contains a specified pattern of characters. fmt - Reads text from standard input, then outputs formatted text on standard output. pr - Takes text input from standard input and splits the data into pages with page breaks, headers and footers in preparation for printing. head - Outputs the first few lines of its input. Useful for getting the header of a file. tai - Outputs the last few lines of its input. Useful for things like getting the most recent entries from a log file. tr - Translates characters. Can be used to perform tasks such as upper/lowercase conversions or changing line termination characters from one type to another (for example, converting DOS text files into Unix style text files). sed - Stream editor. Can perform more sophisticated text translations than tr. awk - An entire programming language designed for constructing filters. Extremely powerful. lpr - Takes standard input and sends it to the default printer. Examples: cat poorly_formatted_report.txt | fmt | pr | lpr In the first example, we use cat to read the file and output it to standard output, which is piped into the standard input of fmt. fmt formats the text into neat paragraphs and outputs it to standard output, which is piped into the standard input of pr. pr splits the text neatly into pages and outputs it to standard output, which is piped into the standard input of lpr. lpr takes its standard input and sends it to the printer. cat unsorted_list_with_dupes.txt | sort | uniq | pr | lpr The second example starts with an unsorted list of data with duplicate entries. First, cat sends the list into sort which sorts it and feeds it into uniq which removes any duplicates. Next pr and lpr are used to paginate and print the list. tar tzvf name_of_file.tar.gz | less View the contents of tar files. Tar files are compress folders that were created using gzip. tar - tape archive file. They have "tar.gz" or ".tgz" extensions. File Permissions: -rwxr-xr-x 1 root root 316848 Feb 27 2000 /bin/bash - When you see a file like this, the first group of rwx's is permissions. Setup: It is easy to think of the permission settings as a series of bits (which is how the computer thinks about them). Here's how it works: rwx rwx rwx = 111 111 111 rw- rw- rw- = 110 110 110 rwx --- --- = 111 000 000 and so on... rwx = 111 in binary = 7 rw- = 110 in binary = 6 r-x = 101 in binary = 5 r-- = 100 in binary = 4 Now, if you represent each of the three sets of permissions (owner, group, and other) as a single digit, you have a pretty convenient way of expressing the possible permissions settings. For example, if we wanted to set some_file to have read and write permission for the owner, but wanted to keep the file private from others, we would: chmod 600 some_file Examples: Value - Meaning: 777 - (rwxrwxrwx)...........No restrictions on permissions. Anybody may do anything. Generally not a desirable setting. 755 - (rwxr-xr-x)..............The file's owner may read, write, and execute the file. All others may read and execute the file. This setting is common for programs that are used by all users. 700 - (rwx------)...............The file's owner may read, write, and execute the file. Nobody else has any rights. This setting is useful for programs that only the owner may use and must be kept private from others. 666 - (rw-rw-rw-)............All users may read and write the file. 644 - (rw-r--r--)...............The owner may read and write a file, while all others may only read the file. A common setting for data files that everybody may read, but only the owner may change. 600 - (rw-------)...............The owner may read and write a file. All others have no rights. A common setting for data files that the owner wants to keep private. The chmod command can also be used to control the access permissions for directories. Again, we can use the octal notation to set permissions, but the meaning of the r, w, and x attributes is different: r - Allows the contents of the directory to be listed if the x attribute is also set. w - Allows files within the directory to be created, deleted, or renamed if the x attribute is also set. x - Allows a directory to be entered (i.e. cd dir). Examples: Value - Meaning: 777 - (rwxrwxrwx).......No restrictions on permissions. Anybody may list files, create new files in the directory and delete files in the directory. Generally not a good setting. 755 - (rwxr-xr-x)..........The directory owner has full access. All others may list the directory, but cannot create files nor delete them. This setting is common for directories that you wish to share with other users. 700 - (rwx------)............The directory owner has full access. Nobody else has any rights. This setting is useful for directories that only the owner may use and must be kept private from others. References: http://linuxcommand.org/lc3_lts0010.php